/*
 * @Author: Penk
 * @LastEditors: Penk
 * @LastEditTime: 2022-10-08 17:23:18
 * @FilePath: \autojs-demo\自动刷视频.js
 */
// 引入弹框 需要将文件先保存在手机，因为是手机内跑的demo
require("./ui界面")
// 根据APP名称打开APP
app.launchApp("抖音极速版");
//  设置脚本坐标点击所适合的屏幕宽高。如果脚本运行时，屏幕宽度不一致会自动放缩坐标。这个功能可以设置屏幕上坐标点击的等比缩放效果。
setScreenMetrics(1080, 1920);
sleep(5000);

var mApp = {}

var params = {
  commentProb = 10,
  collectProb = 50,
  transmitProb = 50,
  zanProb = 50,
}

/**
 * @desc 根据条件点击找到组件，并且点击其中心点，并返回
 * @param {*} collection 控件集合
 * @param {*} clickFlag 是否点击
 * @param {*} index 索引
 * @param {*} num 按钮点击随机范围
 * @returns 
 */
function clickByTextAndType(collection, clickFlag, index, num) {
  if (!collection || collection.empty()) {
    throw ("控件集合有问题！！！");
  }

  var length = collection.length;

  clickFlag = clickFlag ? true : false;

  var rect = null;
  // 抖音刷视频的规则，懒加载  一般拿倒数第二个，抖音懒加载
  index = index ? index : (length - 2);
  index = index >= 0 ? index : 0;

  // for (let i = 0; i < length; i++) {
  //   log(collection[i].bounds().centerY());
  // }

  // 找到了
  rect = collection[index].bounds();

  // 点击point
  var point = {
    x: rect.centerX(),
    y: rect.centerY()
  }

  // 点击按钮
  if (!!clickFlag)
    clickPlus(point, num);

  return point;
}

// 根据位置随机点
function clickPlus(position, num) {
  num = num ? num : 5

  var x = position.x + random(-num, num);
  var y = position.y + random(-num, num)

  if (mApp.isPlaceholderInPage()) {
    console.log("有合集...");
    y = y - 107
  }

  console.log(`点击：${x}，${y}`);
  click(x, y);
}

// 随机评论
function randomComment() {
  var arr = [
    "别人家的从来没让我失望过",

    "这笑声没有几年的哮喘是笑不出来的/这笑声和我家水壶开了是的/敷面膜的我直接笑出了皱纹",
    "怎么才能让我男/女朋友无意间看见这个视频",

    "看到了有人摔倒了我毫不犹豫的点赞了",

    "开始以为是青铜，没想到是个王者",

    "狗是个好狗，主人正不正经就不知道了/人和狗总得疯一个/狗子，不怕你是二哈，就怕你遇到一个二哈的主子!天啊，给我个正常的主人吧",

    "看到了有人摔倒了我毫不犹豫的点赞了",

    "毁掉一首好歌最好的方法，就是把它设为起床闹铃",

    "这要是在古代，凭我一个人的长相就能撑起整个后宫!”“你长得就这么像柱子吗?",

    "如果你有喜欢的女生，就送她一支口红吧，至少她亲别人的时候，你还有参与感",

    "都别安慰我，照个镜子就能恢复好心情的事不用麻烦大家",

    "我想寸步不离的守着你，我怕我走开一步你连屎都吃",

    "我还是很讨厌你，像吃了花椒的邻居，麻了隔壁",

    "每个人有自己的宿命，一切又与他人何干?",

    "当我在大街上摔倒，周围人对我笑时，爬起来再摔几次，笑死他们。",

    "一个吃货的原则就是，谁天天给我买零食我就喜欢谁。",

    "一个不认输，一个不罢手，就一辈子了。",

    "来我身边不好吗，你为什么要当一只特立独行的猪呢?",

    "别人都是为怎么挣钱而发愁，我却是为怎么花钱而发愁。两百块钱怎么能花到下个月呢?",

    "每一个成功男人的背后，都会有一个吃饱了撑的没事做的女人。",

    "你要吃饱，睡得早，不要仗着自己长得丑就可以任意熬夜。",

    "什么叫青春，你妈强迫你，你还是不穿秋裤。什么叫成熟，你妈没强迫你，你就穿上秋裤了。",

    "老板，你家的粥喝着太方便了，戴着口罩都不影响喝粥。",

    "好不容易习惯了自己的长相，理个发又换了一种丑法。",

    "出生的时候，上帝问我是要记性好还是要长得帅，我已经忘了当时怎么回答的了。",

    "想知道你喜不喜欢一个人很简单，谁叫你傻逼，你听着舒服，那就是了。",

    "嫁人就要嫁给唐僧这样的，能给自己买得起保养品就好，买不起就把他当保养品吃了。",

    "如果说睡觉是给人体充电的话，那么我想说我从来没满格过。",
  ]
  return arr[random(0, arr.length - 1)]
}

// 当前页面是否有合集按钮
mApp.isPlaceholderInPage = function () {
  var hj = text("合集").find();
  if (!!hj.length) {
    for (let i = 0; i < hj.length; i++) {
      let y = hj[i].bounds().centerY();
      log(`y：${y}`);

      if (y > 200 && y < device.height) {
        log("存在合集...")
        return true;
      }
    }

  }

  // 热搜
  var dmn = id("dmn").find();
  if (!!dmn.length) {
    for (let i = 0; i < dmn.length; i++) {
      let y = dmn[i].bounds().centerY();
      log(`y：${y}`);

      if (y > 200 && y < device.height) {
        log("存在热搜...")
        return true;
      }
    }
  }

  // 相关搜索
  var ss = text("ss").find();
  if (!!ss.length) {
    for (let i = 0; i < ss.length; i++) {
      let y = ss[i].bounds().centerY();
      log(`y：${y}`);

      if (y > 200 && y < device.height) {
        log("存在相关搜索...")
        return true;
      }
    }
  }
  return false;
}

mApp.getBtnPosition = function () {
  // 判断是否有占位符在
  var ret = this.isPlaceholderInPage();
  if (ret) {
    this.slide();
    sleep(5000);

    this.getBtnPosition();
    return;
  }

  var btn = {};

  // 拿到点赞按钮位置
  var collection = null;
  collection = className("android.widget.LinearLayout").descContains("未点赞").find();
  if (!collection || collection.length == 0) {
    log("获取点赞按钮失败~");
  } else {
    btn.zan = clickByTextAndType(collection);
    sleep(1000);
  }

  // 拿到评论按钮位置
  collection = className("android.widget.LinearLayout").descContains("评论").find();
  if (!collection || collection.length == 0) {
    log("获取评论按钮失败~");
  } else {
    btn.comment = clickByTextAndType(collection);
    sleep(1000);
  }

  // 拿到收藏按钮位置
  collection = className("android.widget.LinearLayout").descContains("未选中，收藏").find();
  if (!collection || collection.length == 0) {
    log("获取收藏按钮失败~");
  } else {
    btn.collect = clickByTextAndType(collection);
    sleep(1000);
  }

  // 拿到转发按钮位置
  log("获取转发按钮");
  collection = className("android.widget.LinearLayout").descContains("分享").find();
  if (!collection || collection.length == 0) {
    log("获取转发按钮失败~");
  } else {
    btn.transmit = clickByTextAndType(collection);
    sleep(1000);
  }

  log("getBtnPosition" + JSON.stringify(btn));
  return btn;
}

// 抖音操作-点赞
mApp.zan = function () {
  clickPlus(this.btn.zan);
}

// 抖音操作-评论
mApp.comment = function () {
  // 点击评论按钮
  clickPlus(this.btn.comment);

  sleep(random(500, 1000));
  // 输入评论
  setText(0, randomComment());

  sleep(random(1000, 5000));
  // 点击发送
  var collection = descContains("发送").find();
  clickByTextAndType(collection, true, 0);

  sleep(random(1000, 5000));
  back();
}

// 抖音操作-收藏
mApp.collect = function () {
  // 点击收藏按钮
  clickPlus(this.btn.collect);

  // 延时，有弹出框...
  sleep(random(3000, 5000));
}

// 抖音操作-转发
mApp.transmit = function () {
  // 点击转发按钮
  clickPlus(this.btn.transmit);

  sleep(random(1000, 2000));
  // 私信朋友按钮
  var collection = textContains("私信朋友").find();
  clickByTextAndType(collection, true, 0);

  sleep(random(1000, 2000));
  // 私信分享朋友按钮
  var collection = descContains("分享").find();
  var point = clickByTextAndType(collection, true, random(0, 3));

  sleep(random(1000, 2000));
  // 继续点击该位置，可以发信息
  click(point.x, point.y);

  sleep(random(1000, 2000));
  // 输入信息
  setText(0, randomComment());

  sleep(random(1000, 2000));
  // 点击发送
  collection = descContains("发送").find();
  clickByTextAndType(collection, true, 0);

  sleep(random(1000, 5000));
  back();
}

// 单条视频的操作
mApp.auto = function (runningAll) {
  var flag = false;
  runningAll = runningAll ? true : false;

  // 点赞
  flag = (random(0, 100) < params.zanProb);
  log("=====点赞操作：", flag);
  if (flag || runningAll) {
    if (!this.btn.zan) {
      log("没有点赞按钮~~~~~~");
    } else {
      this.zan();
    }
  }
  sleep(2000);

  // 评论
  flag = (random(0, 100) < params.commentProb);
  log("=====评论操作：", flag);
  if (flag || runningAll) {
    if (!this.btn.comment) {
      log("没有评论按钮~~~~~~");
    } else {
      this.comment();
    }
  }
  sleep(2000);

  // 收藏
  log("=====收藏操作：", flag);
  flag = (random(0, 100) < params.collectProb);
  if (flag || runningAll) {
    if (!this.btn.collect) {
      log("没有收藏按钮~~~~~~");
    } else {
      this.collect();
    }
  }
  sleep(2000);

  // 转发
  flag = (random(0, 100) < params.transmitProb);
  log("=====转发操作：", flag);
  if (flag || runningAll) {
    if (!this.btn.transmit) {
      log("没有转发按钮~~~~~~");
    } else {
      this.transmit();
    }
  }
  sleep(2000);
}

// 滑动视频操作
mApp.slide = function () {
  // 从下往上
  var parm1 = [device.width / 2 - 200, device.height / 2 + random(10, 80) + 600];
  var parm2 = [device.width / 2 - 200 + random(30, 100), device.height / 2 + random(10, 80) - 400];

  // log(`parm1:${parm1[0]},${parm1[1]}`);
  // log(`parm2:${parm2[0]},${parm2[1]}`);
  gesture(50, parm1, parm2);
}

// 刷视频操作
mApp.oneKey = function (runningAll) {
  var storage = null;
  while (true) {
    storage = null;
    storage = storages.create("dy");
    console.log("自动执行开关状态:" + storage.get("switch"));

    // 先模拟人工看10-20s
    sleep(random(10000, 20000));

    try {
      if (!!storage.get("switch")) {
        // 看完后开始执行 模拟人工操作
        this.auto(runningAll);

        // 操作完后，等待timer后再翻页
        var timer = random(5000, 8000);
        log(`将在${timer}毫秒秒后翻视频`)
        sleep(timer);
        this.slide();
      }
    } catch (error) {
      continue;
    }
  }
}

mApp.btn = mApp.getBtnPosition();
mApp.oneKey();